package com.example.proxyDemo1;

import com.example.proxyDemo1.demo01.TaoBao;
import com.example.proxyDemo1.demo02.MySellHandler;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class ShopMain {

    public static void main(String[] args) {

//        useStaticProxy();

        useDynamicProxy();

    }

    //使用静态代理
    private static void useStaticProxy(){
        TaoBao taoBao = new TaoBao();
        float sell = taoBao.sell(25);
        System.out.println("商家的价格：" + sell);
    }

    private static void useDynamicProxy(){

        //创建目标对象
        UsbSell factory = new UsbKingFactory();

        //创建InvocationHandler对象
        InvocationHandler handler = new MySellHandler(factory);

        //创建代理对象
        UsbSell proxy = (UsbSell)Proxy.newProxyInstance(factory.getClass().getClassLoader(), //类加载器
                factory.getClass().getInterfaces(), //获取被代理对象的所有接口
                handler); //代理对象

        //通过代理执行方法
        float price = proxy.sell(1);
        float phonePrice = proxy.getShop("phone");

        System.out.println(price);

        System.out.println(phonePrice);

    }

}
